package com.yckj.dao;
import com.yckj.domain.User;
import com.yckj.util.DbUtilHikari;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.hutool.crypto.SecureUtil;

/**
 *对用户表的操作：注册、删除、查询、修改用户
 * @author wangge
 * @version 1.0
 */
public class UserDao {
    /**
     * 查询所有用户
     * @return 包含对象的集合
     */
    public List<User> selectAllUser(){
        List<User> userList = new ArrayList<User>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        conn = DbUtilHikari.getConnection();

        String sql = "SELECT usersid,username,userpsw FROM users";
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            //把rs数据转移到集合
            while(rs.next()){
                //user当前是空的
                User user = new User();
                user.setUsersid(rs.getInt("usersid"));
                user.setUsername(rs.getString("username"));
                user.setUserpsw(rs.getString("userpsw"));
                userList.add(user);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtilHikari.close(rs,pstmt,conn);
        }


        return userList;

    }




    /**
     *修改用户信息
     * @param usersid 用户编号
     * @param uname 用户名
     * @param upsw 密码
     * @return 成功返回1；否则返回0；
     */
   public int updateUser(int usersid,String uname,String upsw){
       int flag = 0;
       //conn表示数据库连接
       Connection conn = null;

       PreparedStatement pstmt = null;
       //  获取连接
       conn = DbUtilHikari.getConnection();
       //定义并准备SQL语句
       String sql = "UPDATE users SET username=?,userpsw=? WHERE usersid=?";
       try {
           pstmt = conn.prepareStatement(sql);
           //给？赋值
           pstmt.setString(1,uname);
           pstmt.setString(2,SecureUtil.md5(upsw));
           pstmt.setInt(3,usersid);
           //执行SQL语句
           flag = pstmt.executeUpdate();
       } catch (SQLException throwables) {
           throwables.printStackTrace();
       } finally {
           DbUtilHikari.close(pstmt,conn);
       }
       return  flag;

   }

    /**
     * 按编号删除用户
     * @param usersid 用户编号
     * @return 删除成功返回1；否则返回0
     */
    public int deleteUser(int usersid){
      int flag = 0;
        //conn表示数据库连接
        Connection conn = null;

        PreparedStatement pstmt = null;
        //  获取连接
        conn = DbUtilHikari.getConnection();
        //定义并准备SQL语句
        String sql = "DELETE FROM users WHERE usersid=?";
        try {
            pstmt = conn.prepareStatement(sql);
            //给？赋值
            pstmt.setInt(1,usersid);
            //执行SQL语句
            flag = pstmt.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //释放资源
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }





    /**
     * 按用户名和密码登录
     * @param uname 用户名
     * @param upsw 密码
     * @return 成功返回true；否则false
     */
    public  boolean login(String uname,String upsw){
        //flag是登陆成功与否的标志
        boolean flag = false;
        //conn表示数据库连接
        Connection conn = null;
        //pstmt是执行SQL语句的
        PreparedStatement pstmt = null;
        //rs代表结果集，从数据库查到的结果放在rs里
        ResultSet rs = null;
        //获得数据库链接；
        conn = DbUtilHikari.getConnection();
        //定义并准备SQL语句
        String sql = "SELECT * FROM users WHERE username=?AND userpsw=?";
        try {
            pstmt = conn.prepareStatement(sql);
            //给？赋值
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            //下达执行指令
            rs=pstmt.executeQuery();
            //判断rs结果集里有没有数据
            if (rs.next()){
                flag = true;
            }else {
                flag = false;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtilHikari.close(rs,pstmt,conn);
        }


        return flag;

    }



    /**
     * 用户注册
     * @param uname 用户名
     * @param upsw 密码
     * @return 注册成功返回1，否则返回0
     */
    public int insertUser(String uname,String upsw) {
        // 1. 声明一些变量备用
        // conn代表数据库连接
        Connection conn = null;
        // 预编译对象，用pstmt执行SQL语句
        PreparedStatement pstmt = null;
        // 注册成功与否的标志，如果是0注册失败；如果1注册成功
        int flag = 0;

        // 2. 获取连接
        conn = DbUtilHikari.getConnection();
        // 3. 定义并准备SQL语句
        String sql = "INSERT INTO users(username,userpsw) VALUES(?,?)";
        try {
            pstmt = conn.prepareStatement(sql);
            //4. 给?赋值
            pstmt.setString(1,uname);
            pstmt.setString(2,SecureUtil.md5(upsw));
            // 5. 执行SQL语句（下达执行指令）
            flag = pstmt.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            // 6. 关闭数据库资源
            DbUtilHikari.close(pstmt,conn);
        }
        return flag;
    }
}

